{ "cells": [ { "cell_type": "markdown", "metadata": { "hideCode": false, "hidePrompt": false, "slideshow": { "slide_type": "slide" } }, "source": [ "![Curso Schwarz-Sosa-Suriano](http://www.fi.uba.ar/sites/default/files/logo.png)\n", "\n", "# Interpolación - Tercera Parte\n", "\n", "***\n", "\n", "**Curso Schwarz - Sosa - Suriano**\n", "- Métodos Numéricos. *Curso 2*\n", "- Análisis Numérico I. *Curso 4*\n", "- Métodos Matemáticos y Numéricos. *Curso 6*" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "hideCode": true, "hideOutput": true, "hidePrompt": true, "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xy
000.500
110.933
220.067
330.500
440.933
550.067
660.500
770.933
880.067
990.500
10100.933
\n", "
" ], "text/plain": [ " x y\n", "0 0 0.500\n", "1 1 0.933\n", "2 2 0.067\n", "3 3 0.500\n", "4 4 0.933\n", "5 5 0.067\n", "6 6 0.500\n", "7 7 0.933\n", "8 8 0.067\n", "9 9 0.500\n", "10 10 0.933" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np #librería para operaciones algebraicas y numéricas\n", "import pandas as pd #librería para manejo de datos\n", "import matplotlib.pyplot as plt #librería para graficar\n", "\n", "#Cargo los datos\n", "\n", "datan=pd.read_table('data.csv', sep=',', header=0)\n", "dfn = pd.DataFrame(datan)\n", "dfn" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "hideCode": true, "hidePrompt": true, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\micae\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:16: RuntimeWarning: divide by zero encountered in double_scalars\n", " app.launch_new_instance()\n", "C:\\Users\\micae\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:17: RuntimeWarning: invalid value encountered in double_scalars\n" ] }, { "data": { "image/png": "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EvkAODiecqubKFTV0z9AuU44wW3gzTd93EhIeCRJy5bJ0eb7zDMunt69g46kagYNUs/bnL321lsuxtat3UGtJrrgAvcZrr026Ej2NH68i+2AA1Q3b47vPeG+l333Vd2yperbXrFCwwNhakWi8OtWIxLFgQe6DXzzjY8bCSkuVm3Txm3v66/9315FQiM29F//CjqSqnn9dRd/u3auPT0ZhUcOJXMyq8jnn7vPsPfe7hd5sli8uLSD+r334n9fcbFqr15a7RFdubmujO7da0UfRe2lCitWuPvt2sVe1wsiyXOW9tq18Oabru/kvPOCjaWqhgxxF9ZbsQJefDHoaPY0Z46bD7tRIxJzNpZPeveGnBxYty655gS58kp34cILLii9TE48ROCmm9z9u++GwsKqbf/nn92yTZuqvb8KLFFEEa5T+GLdOjfzXOPG7pIFiZAsiWLaNNeZN2CAu45STZSWBr//vbufjFeVDV/8b+RIaNo02FiqQwTGjnX3H3ggOeYE+eADeP119797112Vf/9vfuMm5vr5ZzdZV1VEJApfj1MRLFEEIS/PLRNRmwgL//L58MOq/5LxQjJfKbYyLrrIJflPP4VZs4KOptSKFe7SEenppdeoqsnOO89den7uXPjss2BjKS6Ga6919//856r90ElLK52nvKoj58LHD6tRpLhENjuFtW3rmks2b3ZzVARh6VJ3YK1fH04/PZgYvNKoEYwY4e4nU63iX/8qnQ87KyvoaKovM9PVjCD4q/c++6z732ndunRO9aq48EJXI/nkE5cAK8uanpJHr14+zhQZRKKA4JufnnrKLc84w/2j1HRjx7pfiM88kxwXXdywASZOdPeTaQa76rrsMrefp02DVauCiWHHDvjrX939v/+9elfgbdy49Hyc//638u+PSBS+HqciWKKIYvZsH690XBsThSpMnuzuX3BB4rfvh44d3RwahYXwyCNBRwMPP+wug96/f/LMh+2F9u3dSWtFRTBpUjAxPPKIqxF36QLDh1e/vPBVcqdMgZ07K/feiETh63EqgiWKivjRUxROFG3bel92LP37uw7CmTNh69bEbnv2bPj+e2jZEgYOTOy2/RTuB3j4YferMyibN5d2Yod/+aaScKf2ww8nfqrUDRvgllvc/TvvdGeOV1d2Nhx2GBQUuM7xyggnigQePyxRVKSy2T4eQXRmA+y9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oEMxNVRmZiZt27alTp06QYdSI+x2nPKRJYp47LUXpKW55qXCQijvS2yJgry8PBo3bkyHDh0Qq1WZSlJVCgoKyMvLo2PHjkGHYyJY01M80tKgWTN3f/368tdZudIta3Gi2L59O82bN7ckYapERGjevLnVSJOQJYp47b23W65bV/7rK1a4Zfv2iYknSVmSMNVh35/kZIkiXs2bu2VFiaJdu8TEY4wxCWKJIl7x1igsUZgaaMqUKSxfvjzoMEySCiRRiMg5IjJfRIpFJCfGestE5BsRmSsiuYmMcQ+WKGqERo0aBR2CJ/r168dBBx1Ejx49OOSQQ5hYhTOrbrzxRt59990K13vsscfIz8+nfRzNpvfddx9bt26N+vqll17Kd999V6k4TfILatTTt8CZwIQ41u2vqmt9jmcPuWXTUjhRFBTsufLOnbB6tev0ttntUoqqoqqkpSX+N9WUKVPIyclh3bp17L///gwfPpy6devG9d5du3Zx8803x7XuiBEj4o7pvvvu44ILLqBBgwblbvPRRx+NuyxTfXscp3wSSI1CVReo6g9BbDtee0wxGKuPYuVKN5C5VSvIsBHHgDvp0I9bFbz66qscccQR9OzZkwEDBvDLL78AkJ+fz8CBA8nOzmb06NFkZWWxdu1ali1bxiGHHMKYMWPIzs5mxYoVXH755eTk5HDooYdy0003lZTdoUMHbrrpJrKzs+natSvff/99zLIBJk+eTO/evenRowejR49m165dMePfvHkzDRs2JD09HSBmLDfffDPHHHMM06ZNY/jw4Tz33HMAfPXVVxx11FF0796d3r17s2nTJnbt2sU111zD4YcfTrdu3Zgwwf1umzFjBv369ePss8/m4IMPZtiwYagq999/PytXrqR///70798fcDW4G2+8kSOOOILPPvuMfv36kRs6er311ltkZ2fTvXt3TjjhBADWrVvH6aefTrdu3ejTpw/z5s2r0t/UOImaCrXkF1MQN2AGkBPj9aXAbGAWMKqCskYBuUBu+/bt1XMPPKAKqmPG7PnaRx+51/r08X67Nch3331X+sClTu9vFWjYsOEez61bt06Li4tVVXXSpEl69dVXq6rq7373O73ttttUVfXNN99UQPPz83Xp0qUqIvrZZ5+VlFFQUKCqqkVFRdq3b1/9+uuvVVU1KytL77//flVVffDBB3XEiBExy/7u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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def LagrangeBaricentricoPlot (df,x):\n", " N=len(df)\n", " W=np.zeros(N)\n", " P=0\n", " L=1\n", " PB=0\n", " for i in range (0,N):\n", " if x==df['y'][i]: #Para que no divida por cero .\n", " return df['y'][i]\n", " L*=x-df['x'][i]\n", " w=1\n", " for j in range (0,N):\n", " if j != i:\n", " w*=1/(df['x'][i]-df['x'][j])\n", " W[i]=w\n", " P+=(w*df['y'][i])/(x-df['x'][i])\n", " PB=L*P\n", " return PB\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)')\n", "\n", "ejex = np.linspace(min(dfn['x'])*0.9, max(dfn['x'])*1,num=1000)\n", "Nx=len(ejex)\n", "y_pl=np.zeros(Nx)\n", "y_plb=np.zeros(Nx)\n", "\n", "for i in range(0,Nx):\n", " y_plb[i] = LagrangeBaricentricoPlot(dfn,ejex[i]);\n", " \n", "plt.plot(ejex, y_plb, linewidth=2, color = 'red')\n", "plt.scatter(dfn['x'], dfn['y'], color = 'blue')\n", "plt.legend(['Lagrange Baricéntrico','Datos','limite','dato'],fontsize=10)\n", "plt.axvline(min(dfn['x']), linewidth=2, color='blue',linestyle='dashed')\n", "plt.axvline(max(dfn['x']), linewidth=2, color='blue',linestyle='dashed')\n", "plt.title('Ejemplo de Fenómeno de Runge');" ] }, { "cell_type": "markdown", "metadata": { "hideCode": false, "hidePrompt": false, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Fenómeno de Runge\n", "___\n", "\n", "Podemos decir que la interpolación polinómica no resulta muy confiable para estimar o aproximar valores en los extremos, con lo cual pierde efectividad. Estas oscilaciones que aparecen en los\n", "polinomios de mayor grado cuando los datos están distribuidos uniformemente se conoce como\n", "Fenómeno de Runge. Veamos una forma de utilizar polinomios pero que evitarlo.\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Interpolación por Trazadores cúbicos o splines\n", "___\n", "Supongamos que en lugar de proponer interpolar los datos mediante un solo polinomio que pase por todos los puntos, lo hagamos mediante segmentos de curvas, en este caso con polinomios de tercer grado, denominados *Trazadores cúbicos*. Denominamos las curvas de la siguiente forma:\n", "\n", "$$ S_i(x)=a_i+b_i(x-x_i)+c_i(x-x_i)^2+d_i(x-x_i)^3, $$\n", "\n", "con $i = 0, 1, . . . , n - 1$. Observemos que tenemos cuatro constantes para cada polinomio pero disponemos solamente dos datos en el tramo considerado. Debemos agregar condiciones para poder armar nuestra curva interpolante. Al no disponemos de más datos, vamos a imponer que las curvas cumplan con estas condiciones:\n", "\n", "1. $S_i(x_i)=f(x_i)$ para cada $i=0;1;\\ldots;n$;\n", "2. $S_{i+1}(x_{i+1})=S_i(x_{i+1})$ para cada $i=0;1;\\ldots;n-2$;\n", "3. $S'_{i+1}(x_{i+1})=S'_i(x_{i+1})$ para cada $i=0;1;\\ldots;n-2$;\n", "4. $S''_{i+1}(x_{i+1})=S''_i(x_{i+1})$ para cada $i=0;1;\\ldots;n-2$;\n", "\n", "Alguna de las siguiente condiciones de borde:\n", "1. $S''_0(x_0)=S''_{n-1}(x_n)=S''_n(x_n)=0$ (**frontera libre**);\n", "2. $S'_0(x_0)=f'(x_0)=\\alpha$ y $S'_{n-1}(x_n)=S'_n(x_n)=f'(x_n)=\\beta$ (**frontera sujeta**).\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Interpolación por Trazadores cúbicos o splines\n", "___\n", "Analizando el caso de **Frontera Libre**, hay que resolver un sistema de ecuaciones de la forma $Ax=B$ con $A$ :\n", "\n", "\\begin{bmatrix}\n", "1&0&0&\\ldots&\\ldots&0 \\\\\n", "h_0&2(h_0+h_1)&h_1&\\ddots&\\ddots&\\vdots \\\\\n", "0&h_1&2(h_1+h_2)&h_2&\\ddots&\\vdots \\\\\n", "\\vdots&\\ddots&\\ddots&\\ddots&\\ddots&0 \\\\\n", "\\vdots&\\ddots&\\ddots&h_{n-2}&2(h_{n-2}+h_{n-1})&h_{n-1}\\\\\n", "0&\\ldots&\\ldots&0&0&1\n", "\\end{bmatrix}\n", "\n", "y el vector $B$ : \n", "\\begin{bmatrix}\n", "0 \\\\\n", "\\frac{3}{h_1}(a_2-a_1)-\\frac{3}{h_0}(a_1-a_0) \\\\\n", "\\vdots \\\\\n", "\\vdots \\\\\n", "\\frac{3}{h_{n-1}}(a_n-a_{n-1})-\\frac{3}{h_{n-2}}(a_{n-1}-a_{n-2})\\\\\n", "0\n", "\\end{bmatrix}\n", "\n", "Resolviendo ese sistema de Ecuaciones Lineales obtenemos los coeficientes $c_i$ de los trazadores:\n", "\\begin{bmatrix}\n", "c_0 \\\\\n", "c_1 \\\\\n", "\\vdots \\\\\n", "\\vdots \\\\\n", "c_n\n", "\\end{bmatrix}" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "De la primera condición, recordemos que como $S_i(x_i)=a_i=f(x_i)$\n", "\n", "El sistema de ecuaciones lineales tiene solución única, lo que nos asegura que existe un sólo conjunto de valores $c_i$ y, en consecuencia, un solo conjunto de curvas $S_i(x)$.\n", "\n", "Una vez obtenidos los valores de los $c_i$, podemos hallar los restantes coeficiente, $b_i$ y $d_i$ con las expresiones ya vistas:\n", "\n", "\\begin{align*}\n", "d_i&=\\frac{c_{i+1}-c_i}{3h_i}, \\\\\n", "b_i&=\\frac{a_{i+1}-a_i}{h_i}-\\frac{h_i}{3}(2c_i+c_{i+1}),\n", "\\end{align*}\n", "\n", "con lo que obtenemos las $S_i(x)$ curvas o polinomios que interpolan los datos.\n" ] }, { "cell_type": "markdown", "metadata": { "hideCode": false, "hidePrompt": false, "slideshow": { "slide_type": "slide" } }, "source": [ "### Resolvamos un ejemplo numérico\n", "___\n", "\n", "Supongamos que tenemos la siguiente tabla y queremos calcular $P(4.5)=?$\n", "\n", "Utilicemos el método de *Spline de Frontera Libre*.\n", "\n", "|$i$| $x$ | $y$\n", "| ---| --- | ---\n", "|$0$ |2 | 7\n", "|$1$| 4 | 6\n", "|$2$| 5 | 9\n", "|$3$|7| 12" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "#Metodo de Spline con frontera libre\n", "def Splinelibre(df,x):\n", " # Genero la matriz A de Spline\n", " n = len(df)\n", " A = np.zeros((n,n))\n", " Y = df['y']\n", " X = df['x']\n", " A[0][0] = 1\n", " A[n-1][n-1] = 1\n", " h = np.zeros(n-1)\n", " for i in range(0,n-1):\n", " h[i]=X[i+1]-X[i]\n", " for i in range(1,n-1):\n", " A[i][i-1] = h[i-1]\n", " A[i][i] = 2*(h[i-1]+h[i])\n", " A[i][i+1] = h[i]\n", " # Genero el vector B del sistema Ax=B\n", " B = []\n", " for k in range(0,n):\n", " if (k == 0 or k == n-1):\n", " B.append(0)\n", " else:\n", " auxB = (3/h[k])*(Y[k+1] - Y[k]) - (3/h[k-1])*(Y[k] - Y[k-1]) \n", " B.append(auxB)\n", " \n", " #Obtengo los coeficientes para armar los trazadores\n", " # Coeficientes ci\n", " c = np.linalg.solve(A, B) \n", " \n", " # Coeficientes ai = yi\n", " a=Y \n", " \n", " # Coeficientes bi y di.\n", " b,d = [],[]\n", " for i in range(0,n-1):\n", " aux_b = (a[i+1]-a[i])/h[i] - h[i]*(2*c[i]+c[i+1])/3 \n", " b.append(aux_b)\n", " aux_d = (c[i+1] - c[i])/(3*h[i])\n", " d.append(aux_d)\n", " \n", " # Evalúo x en el segmento que corresponde\n", " si =[]\n", " for k in range(0,n-1):\n", " if (X[k] == x):\n", " si = Y[k]\n", " elif (x >= X[k] and x < X[k+1]):\n", " si = a[k] + b[k]*(x - X[k]) + c[k]*(x - X[k])**2 + d[k]*(x - X[k])**3\n", " \n", " return si,b,c,d,A,h,B\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Por el método de Spline obtenemos P(x= 4.5 )= 7.39286\n" ] } ], "source": [ "#Cargo los datos\n", "\n", "data = [[2, 7], [4, 6], [5, 9], [7, 12]]\n", "df = pd.DataFrame(data, columns = ['x', 'y'])\n", "\n", "xp=4.5\n", "\n", "ejemploSP=Splinelibre(df,xp)\n", "print('Por el método de Spline obtenemos P(x=',xp,')=',round(ejemploSP[0],5))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "hideCode": true, "hidePrompt": true, "scrolled": true, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Primero debo armar la matriz de Spline: \n", "\n", "Para eso debo calcular los distintos valores de h: \n", "\n" ] }, { "data": { "text/latex": [ "$\\displaystyle h_0= x_1- x_0=4-2= 2.0$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle h_1= x_2- x_1=5-4= 1.0$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle h_2= x_3- x_2=7-5= 2.0$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Luego la Matriz A queda: \n", "\n", " 0 1 2 3\n", "0 1.0 0.0 0.0 0.0\n", "1 2.0 6.0 1.0 0.0\n", "2 0.0 1.0 6.0 2.0\n", "3 0.0 0.0 0.0 1.0\n", "\n", " Armamos el vector B para resolver el sistema Ax=B: \n" ] }, { "data": { "text/latex": [ "$\\displaystyle B_0=0.0$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle B_1= \\frac{3}{h_1}(a_2-a_1)- \\frac{3}{h_0}(a_1-a_0)\\frac{3}{h_1}(y_2-y_1)- \\frac{3}{h_0}(y_1-y_0)= \\frac{3}{1.0}(9-6)- \\frac{3}{2.0}(6-7)=10.5$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle B_2= \\frac{3}{h_2}(a_3-a_2)- \\frac{3}{h_1}(a_2-a_1)\\frac{3}{h_2}(y_3-y_2)- \\frac{3}{h_1}(y_2-y_1)= \\frac{3}{2.0}(12-9)- \\frac{3}{1.0}(9-6)=-4.5$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle B_3=0.0$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " De la resolución del sistema Ax=B, obtenemos en el vector x los coeficientes c: \n" ] }, { "data": { "text/latex": [ "$\\displaystyle C_0=-0.0$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle C_1=1.9286$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle C_2=-1.0714$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle C_3=0.0$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import display, Math\n", "\n", "N=len(df)\n", "x = df['x']\n", "y = df['y']\n", "PSP=np.round(ejemploSP[0],4)\n", "b=np.round(ejemploSP[1],4)\n", "c=np.round(ejemploSP[2],4)\n", "d=np.round(ejemploSP[3],4)\n", "A=np.round(ejemploSP[4],4)\n", "h=np.round(ejemploSP[5],4)\n", "B=np.round(ejemploSP[6],4)\n", "print (\"Primero debo armar la matriz de Spline: \\n\") \n", "print (\"Para eso debo calcular los distintos valores de h: \\n\") \n", "\n", "n=N-1\n", "for p in range(0,n):\n", " hi=\"h_\"+str(p)+\"= x_\"+str(p+1)+\"- x_\"+str(p)+\"=\" +str(x[p+1])+\"-\"+str(x[p])+\"= \"+str(h[p])\n", " display(Math((hi)))\n", " \n", "print (\"Luego la Matriz A queda: \\n\") \n", "\n", "Adf=pd.DataFrame(A)\n", "print (Adf);\n", "\n", "print (\"\\n Armamos el vector B para resolver el sistema Ax=B: \") \n", "\n", "B0=\"B_\"+str(0)+\"=\"\n", "display(Math(B0+str(B[0])))\n", "\n", "for p in range(1,n):\n", " Bi=\"B_\"+str(p)+\"= \\\\frac{3}{h_\"+str(p)+\"}(a_\"+str(p+1)+\"-a_\"+str(p)+\")- \\\\frac{3}{h_\"+str(p-1)+\"}(a_\"+str(p)+\"-a_\"+str(p-1)+\")\"\n", " Bih=\"\\\\frac{3}{h_\"+str(p)+\"}(y_\"+str(p+1)+\"-y_\"+str(p)+\")- \\\\frac{3}{h_\"+str(p-1)+\"}(y_\"+str(p)+\"-y_\"+str(p-1)+\")\"\n", " Bnum=\"= \\\\frac{3}{\"+str(h[p])+\"}(\"+str(y[p+1])+\"-\"+str(y[p])+\")- \\\\frac{3}{\"+str(h[p-1])+\"}(\"+str(y[p])+\"-\"+str(y[p-1])+\")=\"\n", " display(Math((Bi+Bih+Bnum)+str(B[p])))\n", "\n", "Bn=\"B_\"+str(n)+\"=\"\n", "display(Math(Bn+str(B[n])))\n", "\n", "print (\"\\n De la resolución del sistema Ax=B, obtenemos en el vector x los coeficientes c: \") \n", "\n", "for p in range(0,N):\n", " Ci=\"C_\"+str(p)+\"=\"\n", " display(Math(Ci+str(c[p])))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "hideCode": true, "hidePrompt": true, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " Una vez obtenidos los coeficientes c, calculamos los otros coeficientes: \n", "\n", " Los coeficientes bi se obtienen: \n" ] }, { "data": { "text/latex": [ "$\\displaystyle b_0= \\frac{a_1-a_0}{h_0}-\\frac{h_0}{3}(2c_0+c_1)= \\frac{y_1-y_0}{h_0}-\\frac{h_0}{3}(2c_0+c_1)= \\frac{6-7}{2.0}-\\frac{2.0}{3}(2-0.0+1.9286)=-1.7857$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle b_1= \\frac{a_2-a_1}{h_1}-\\frac{h_1}{3}(2c_1+c_2)= \\frac{y_2-y_1}{h_1}-\\frac{h_1}{3}(2c_1+c_2)= \\frac{9-6}{1.0}-\\frac{1.0}{3}(21.9286+-1.0714)=2.0714$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle b_2= \\frac{a_3-a_2}{h_2}-\\frac{h_2}{3}(2c_2+c_3)= \\frac{y_3-y_2}{h_2}-\\frac{h_2}{3}(2c_2+c_3)= \\frac{12-9}{2.0}-\\frac{2.0}{3}(2-1.0714+0.0)=2.9286$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " Los coeficientes di se obtienen: \n" ] }, { "data": { "text/latex": [ "$\\displaystyle d_0= \\frac{c_1-c_0}{3h_0}=\\frac{1.9286--0.0}{3(2.0)}=0.3214$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle d_1= \\frac{c_2-c_1}{3h_1}=\\frac{-1.0714-1.9286}{3(1.0)}=-1.0$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle d_2= \\frac{c_3-c_2}{3h_2}=\\frac{0.0--1.0714}{3(2.0)}=0.1786$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print (\"\\n Una vez obtenidos los coeficientes c, calculamos los otros coeficientes: \") \n", "\n", "print (\"\\n Los coeficientes bi se obtienen: \")\n", "\n", "for p in range(0,n):\n", " bi=\"b_\"+str(p)+\"= \\\\frac{a_\"+str(p+1)+\"-a_\"+str(p)+\"}{h_\"+str(p)+\"}-\\\\frac{h_\"+str(p)+\"}{3}(2c_\"+str(p)+\"+c_\"+str(p+1)+\")=\"\n", " biy=\" \\\\frac{y_\"+str(p+1)+\"-y_\"+str(p)+\"}{h_\"+str(p)+\"}-\\\\frac{h_\"+str(p)+\"}{3}(2c_\"+str(p)+\"+c_\"+str(p+1)+\")=\"\n", " bin=\" \\\\frac{\"+str(y[p+1])+\"-\"+str(y[p])+\"}{\"+str(h[p])+\"}-\\\\frac{\"+str(h[p])+\"}{3}(2\"+str(c[p])+\"+\"+str(c[p+1])+\")=\"\n", " display(Math((bi+biy+bin)+str(b[p])))\n", "\n", "print (\"\\n Los coeficientes di se obtienen: \")\n", "\n", "for p in range(0,n):\n", " di=\"d_\"+str(p)+\"= \\\\frac{c_\"+str(p+1)+\"-c_\"+str(p)+\"}{3h_\"+str(p)+\"}=\"\n", " din=\"\\\\frac{\"+str(c[p+1])+\"-\"+str(c[p])+\"}{3(\"+str(h[p])+\")}=\"\n", " display(Math((di+din)+str(d[p])))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "hideCode": true, "hidePrompt": true, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " Evalúo x en el segmento correspondiente: \n", "\n", " Como x= 4.5 evaluo en el segmento entre: \n" ] }, { "data": { "text/latex": [ "$\\displaystyle x_1=4$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle x_2=5$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle s_1(x)=a_1+b_1(x-x_1)+c_1(x-x_1)^2+d_1(x-x_1)^3 = $" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$\\displaystyle s_1(x=4.5)=6+2.0714(4.5-4)+1.9286(4.5-4)^2+-1.0(4.5-4)^3 = 7.3929$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#Este bloque es solo válido para el ejemplo\n", "print (\"\\n Evalúo x en el segmento correspondiente: \")\n", "\n", "print (\"\\n Como x= \",xp,\"evaluo en el segmento entre: \")\n", "\n", "x1=\"x_1=\"\n", "display(Math(x1+str(x[1])))\n", "x2=\"x_2=\"\n", "display(Math(x2+str(x[2])))\n", "\n", "s1=\"s_1(x)=a_1+b_1(x-x_1)+c_1(x-x_1)^2+d_1(x-x_1)^3 = \"\n", "display(Math(s1))\n", "\n", "s1num=\"s_1(x=\"+str(xp)+\")=\"+str(y[1])+\"+\"+str(b[1])+\"(\"+str(xp)+\"-\"+str(x[1])+\")+\"+str(c[1])+\"(\"+str(xp)+\"-\"+str(x[1])+\")^2+\"+str(d[1])+\"(\"+str(xp)+\"-\"+str(x[1])+\")^3 = \"\n", "display(Math(s1num+str(PSP)))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "hideCode": true, "hidePrompt": true }, "outputs": [], "source": [ "def SplinelibrePlot(df,x):\n", " # Genero la matriz A de Spline\n", " n = len(df)\n", " A = np.zeros((n,n))\n", " Y = df['y']\n", " X = df['x']\n", " A[0][0] = 1\n", " A[n-1][n-1] = 1\n", " h = np.zeros(n-1)\n", " for i in range(0,n-1):\n", " h[i]=X[i+1]-X[i]\n", " for i in range(1,n-1):\n", " A[i][i-1] = h[i-1]\n", " A[i][i] = 2*(h[i-1]+h[i])\n", " A[i][i+1] = h[i]\n", " # Genero el vector B del sistema Ax=B\n", " B = []\n", " for k in range(0,n):\n", " if (k == 0 or k == n-1):\n", " B.append(0)\n", " else:\n", " auxB = (3/h[k])*(Y[k+1] - Y[k]) - (3/h[k-1])*(Y[k] - Y[k-1]) \n", " B.append(auxB)\n", " \n", " #Obtengo los coeficientes para armar los trazadores\n", " # Coeficientes ci\n", " c = np.linalg.solve(A, B) \n", " \n", " # Coeficientes ai = yi\n", " a=Y \n", " \n", " # Coeficientes bi y di.\n", " b,d = [],[]\n", " for i in range(0,n-1):\n", " aux_b = (a[i+1]-a[i])/h[i] - h[i]*(2*c[i]+c[i+1])/3 \n", " b.append(aux_b)\n", " aux_d = (c[i+1] - c[i])/(3*h[i])\n", " d.append(aux_d)\n", " \n", " \n", " # Evalúo x en el segmento que corresponde\n", " si =[]\n", " for k in range(0,n-1):\n", " if (X[k] == x):\n", " si = Y[k]\n", " elif (x > X[k] and x < X[k+1]):\n", " si = a[k] + b[k]*(x - X[k]) + c[k]*(x - X[k])**2 + d[k]*(x - X[k])**3\n", " \n", " return si" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "hideCode": true, "hidePrompt": true, "scrolled": true, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "ejex = np.linspace(min(df['x']), max(df['x']),num=1000)\n", "Nx=len(ejex)\n", "y_sp=np.zeros(Nx,dtype='object')\n", "\n", "for i in range(0,Nx):\n", " y_sp[i] = SplinelibrePlot(df,ejex[i])\n", " \n", "y_spline=pd.to_numeric(y_sp,errors='coerce')\n", "plt.xlabel('x')\n", "plt.ylabel('f(x)')\n", "plt.plot(ejex, y_spline, linewidth=2, color = 'green')\n", "plt.scatter(df['x'], df['y'], color = 'blue')\n", "plt.legend(['Spline','Datos','limite','dato'],fontsize=10)\n", "plt.axvline(min(df['x']), linewidth=2, color='blue',linestyle='dashed')\n", "plt.axvline(max(df['x']), linewidth=2, color='blue',linestyle='dashed')\n", "plt.title('Polinomio Interpolante');" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "hideCode": true, "hidePrompt": true, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\micae\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:16: RuntimeWarning: divide by zero encountered in double_scalars\n", " app.launch_new_instance()\n", "C:\\Users\\micae\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:17: RuntimeWarning: invalid value encountered in double_scalars\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.xlabel('x')\n", "plt.ylabel('f(x)')\n", "\n", "ejex = np.linspace(min(dfn['x'])*0.9, max(dfn['x'])*1,num=1000)\n", "Nx=len(ejex)\n", "y_spln=np.zeros(Nx,dtype='object')\n", "y_plb=np.zeros(Nx)\n", "\n", "for i in range(0,Nx):\n", " y_plb[i] = LagrangeBaricentricoPlot(dfn,ejex[i]);\n", "for i in range(0,Nx):\n", " y_spln[i] = SplinelibrePlot(dfn,ejex[i]);\n", "\n", "y_splineN=pd.to_numeric(y_spln,errors='coerce') \n", "\n", "plt.plot(ejex, y_plb, linewidth=2, color = 'red',linestyle='dashed')\n", "plt.plot(ejex, y_splineN, linewidth=2, color = 'green')\n", "plt.scatter(dfn['x'], dfn['y'], color = 'blue')\n", "plt.legend(['Lagrange Baricéntrico','Spline','Datos'],fontsize=10)\n", "plt.axvline(min(dfn['x']), linewidth=2, color='blue',linestyle='dashed')\n", "plt.axvline(max(dfn['x']), linewidth=2, color='blue',linestyle='dashed')\n", "plt.title('Ejemplo de Fenómeno de Runge');" ] }, { "cell_type": "markdown", "metadata": { "hideCode": false, "hidePrompt": false, "slideshow": { "slide_type": "slide" } }, "source": [ "![Curso Schwarz-Sosa-Suriano](http://www.fi.uba.ar/sites/default/files/logo.png)\n", "\n", "# Gracias por su atención\n", "***\n", "\n", "**Curso Schwarz - Sosa - Suriano**\n", "- Métodos Numéricos. *Curso 2*\n", "- Análisis Numérico I. *Curso 4*\n", "- Métodos Matemáticos y Numéricos. *Curso 6*" ] } ], "metadata": { "celltoolbar": "Hide code", "hide_code_all_hidden": true, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 2 }